package com.situ.mall.common.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
import com.situ.mall.common.entity.Member;
import com.situ.mall.common.mapper.MemberMapper;
import com.situ.mall.common.service.IMemberService;
import com.situ.mall.common.util.StringUtil;
import com.situ.mall.common.vo.ResultVO;
import com.situ.mall.common.vo.TableVO;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author JavaWizard
 * @since 2023-09-19
 */
@Service
public class MemberServiceImpl extends ServiceImpl<MemberMapper, Member> implements IMemberService {

//    //查电话号码有没有被注册
//    @Override
//    public Member selectByTel(String tel) {
//        return baseMapper.selectByTel(tel);
//    }
//
//    //修改个人资料
//    @Override
//    public Member selectByMemberId(Integer id) {
//        return baseMapper.selectByMemberId(id);
//    }
//
//    //保存个人资料
//    @Override
//    public void saveMember(Member member) {
//        //判断是否用户名重复
//        Member m = baseMapper.selectByMemberName(member.getMemberName());
//        //如果根据用户名查到了，说明用户名重复，不能添加用户
//        if (m != null) {
//            throw new MyException("用户名已经被使用");
//        }
//        //查电话号码长度是不是11位
//        if (member.getTel().length() != 11) {
//            throw new MyException("电话号码有误，请重新输入");
//        }
//        //查电话号码是不是0-9纯数字
//        for (int i = 0; i < 11; i++) {
//            char c = member.getTel().charAt(i);
//            if (c < '0' || c > '9') {
//                throw new MyException("电话号码有误，请重新输入");
//            }
//        }
//        //如果没传状态码，指定状态码为0，放到里面
//        if (member.getStatus() == null || member.getStatus().isEmpty()) {
//            member.setStatus("0");
//        }
//        baseMapper.update(member);
//    }


    /* 前端请求 */
    //登陆验证
    @Override
    public ResultVO check(String phoneNumber, String password) {
        //先查手机号
        Member m = baseMapper.selectByTel(phoneNumber);
        //查不到，说明手机号都不对
        if (m == null){
            return ResultVO.data(400, "手机号错误", null);
        }
        //如果查到的用户没有密码
        if (m.getPassword() == null){
            return ResultVO.data(400, "请重置密码", null);
        }
        //两个条件必须同时满足
        //如果能查到用户,把传过来的密码进行加密，与根据用户名查到的加密后的密码进行比较
        boolean b = m != null && m.getPassword().equals(StringUtil.md5(password));
        //如果b为true，用户名和密码都正确，打上标记，登录
        if (b) {
            return ResultVO.data(200, "登陆成功", m);
        }else {
            return ResultVO.data(400, "密码错误", null);
        }
    }

    //注册保存
    @Override
    public ResultVO register(String phoneNumber, String password) {
        //先拿着手机号去数据库查用户
        Member m = baseMapper.selectByTel(phoneNumber);
        //能查到，说明手机号已被注册，报错
        if (m != null){
            return ResultVO.data(400, "手机号已被注册", null);
        } else {
            //给密码加密
            String password1 = StringUtil.md5(password);
            //上传加密后的密码
            baseMapper.register(phoneNumber, password1);
            //再查一遍
            Member currentMember = baseMapper.selectByTel(phoneNumber);
            return ResultVO.data(200, "注册成功", currentMember);
        }
    }

    /* 后端操作 */
    //查询渲染表格
    @Override
    public TableVO table(Integer page, Integer limit, String memberName, String tel) {
        //PageHelper 分页小工具
        PageHelper.startPage(page, limit);
        //上边这行代码后跟的第一次查数据库是分页查询，只生效一次！！！
        List<Member> list = baseMapper.list(memberName, tel);
        return TableVO.data(list);
    }

    //重置密码——根据ID查询旧密码带到前台
//    @Override
//    public String selectById(Integer id) {
//        return baseMapper.selectById(id);
//    }
}
